package com.zh.work.jy;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zh.work.util.jy.AesUtil;
import com.zh.work.util.jy.Base64ImgUtil;
import com.zh.work.util.jy.ClientUtil;
import com.zh.work.util.jy.JYMD5;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: I类数字证书+交互式活体v3，用户授权完成后进行主体信息一致性验证，验证成功后返回数字证书
 * @Author: Liard
 * @Create in: 2020/6/26 16:00
 * @Version: 1.0.1
 */
public class CompareAll {
    private static final Logger log = LoggerFactory.getLogger(CompareAll.class);

    private static final String strUrl = "https://101.52.254.188:8443/dat/compareAll_v3/cer";
    private static final String scene_code ="02";//商户应用场景编号
    private static final String pact_no="FHB20200619_001";//协议版本号
    private static final String strLicense ="DDD8B06B21F8BBB522AF0FACA7F73FE9";//接口授权
    private static final String strAppsecret="b69b2b3aeae5592730a7250456d65afd";//应用密码



    public static void main(String[] args) {
        //系统时间
        String strTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        String sName ="李辉能";
        String sId = "421121199706027019";
        //发起证书申请用户主体信息签名
        String pact_sign = JYMD5.MD5Encoder(sName + sId);
        //姓名
        String name = AesUtil.encrypt(sName, strAppsecret);
        //身份证号码
        String id = AesUtil.encrypt(sId, strAppsecret);
        //身份证照片
        String id_photo=JYMD5.encrypt(Base64ImgUtil.GetImageStr("F:\\zh-cloud-elec\\zh-cloud-work-service\\src\\main\\resources\\img\\id_card.jpg"));
        //活体数据包
        String data_photo = "F:\\zh-cloud-elec\\zh-cloud-work-service\\src\\main\\resources\\img\\id_card.jpg";
//                Base64ImgUtil.GetImageStr("E:\\card\\gh.dat");
        //防止翻拍照片  0关闭，1开启
        String strhacker="1";
        //业务流水号
        String strSys_req_sn = "compareAll_v3";
        //C端客户主体信息使用授权协议签署的流水号（通过该流水号要能够定位到签署协议人员），类型String 长度小于40.
        String pact_trade_no ="188697653343682560";

        //事件证据摘要：通常由影像资料、音频资料、图片资料以及其他摘要算法处理后得到的证据Hash。
        String save_cer="**证书扩展信息**";


        new CompareAll().doCheck(id,name,id_photo,data_photo,strhacker,strSys_req_sn,strTime,
                pact_trade_no,pact_sign,save_cer);
    }


    public void doCheck(String strId,String strName,String id_photo,String data_photo,
                        String strhacker,
                        String strSys_req_sn,String strTime, String pact_trade_no,String pact_sign, String save_cer){
        try {
            JSONObject param = new JSONObject();
            param.put("id_card", strId);
            param.put("name", strName);
            param.put("data_photo", data_photo);
            param.put("id_photo", id_photo);
            param.put("anti_hacker", strhacker);

            JSONObject par = new JSONObject();
            par.put("biz_content", param);
            par.put("license_code", strLicense);
            par.put("sys_req_sn", strSys_req_sn);
            par.put("timestamp", strTime);
            par.put("pact_trade_no", pact_trade_no);
            par.put("pact_sign", pact_sign);
            par.put("scene_code", scene_code);
            par.put("save_cer", save_cer);
            par.put("pact_no", pact_no);
            String sign = JYMD5.createSignature(par, strAppsecret);
            par.put("sign", sign);
            par.put("biz_content", param);

            String result = ClientUtil.post(strUrl,par.toString());
            System.out.println(result);

            //解密详情信息
            JSONObject js = JSON.parseObject(result);
            if (js.getJSONObject("jy_response").getString("data") != null) {
                String data_info = js.getJSONObject("jy_response").getString("data");
                JSONObject info = JSON.parseObject(data_info);
                String  photo_self =JYMD5.decrypt( info.get("photo_self").toString());
                String  photo_capture =JYMD5.decrypt( info.get("photo_capture").toString());
                String security_score = info.get("security_score").toString();
                System.out.println("自拍--->"+photo_self);
                System.out.println("抓拍--->"+photo_capture);
                System.out.println("防骇客分值--->"+security_score);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
